package org.qqcui.designpattern.patterns.singleton.hungry;

/**
 * 单例模式，饿汉式写法第一种方式
 * 可以使用，但是可能会造成内存的浪费，因为没有实现懒加载的效果
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-16 21:23
 **/
public class SingletonTest01 {

	public static void main(String[] args) {
		System.out.println("饿汉式写法一，静态不可变成员变量方式");
		Singleton1 instance1 = Singleton1.getInstance();
		Singleton1 instance2 = Singleton1.getInstance();
		System.out.println(instance1 == instance2); // true

		System.out.println("instance1.hashCode=" + instance1.hashCode());
		System.out.println("instance2.hashCode=" + instance2.hashCode());
	}
}

/**
 * 饿汉式写法一
 * 1.提供一个私有化的构造器，防止通过new的方式来创建实例对象
 * 2.初始化一个静态的不可变的成员变量
 * 3.提供给外部一个可以获取实力的公共方法
 */
class Singleton1 {

    /**
     * 构造器一定是私有的
	 * 其实，通过反射的方式，还是能够构建对象的实例的
     */
	private Singleton1() {

	}

	private static final Singleton1 INSTANCE = new Singleton1();

	public static Singleton1 getInstance() {
		return INSTANCE;
	}
}
